// utils/tabbar-manager.js
import { USER_TYPES, TABBAR_CONFIG } from '../types/user-types'

class TabBarManager {
  constructor() {
    this.currentUserType = null
    this.isInitialized = false
  }

  // 初始化 tabBar 配置
  async init(userType ) {
    if (this.isInitialized && this.currentUserType === userType) {
      return
    }

    this.currentUserType = userType
    this.isInitialized = true

    console.log(`🎯 初始化 TabBar，用户类型: ${userType}`)
    
    const config = TABBAR_CONFIG[userType] || TABBAR_CONFIG[USER_TYPES.OPERATOR]
    console.log('tabBar配置', config)
    // 隐藏所有 tabBar 项
    // await uni.hideTabBar()
    // await this.hideAllTabs()
    
    // 显示有权限的 tabBar 项
    // await this.showVisibleTabs(config.visibleTabs)
    // await uni.showTabBar()
    
    // 保存配置到存储
    uni.setStorageSync('tabBarConfig', config)
    uni.setStorageSync('userType', userType)
  }

  // 隐藏所有 tabBar 项(没什么用。。。  uni.hideTabBar本来就是全部隐藏)
  hideAllTabs() {
    return new Promise((resolve) => {
      const hidePromises = []
      for (let i = 0; i < 5; i++) {
        hidePromises.push(
          new Promise((resolveHide) => {
            uni.hideTabBar({
              index: i,
              success: resolveHide,
              fail: resolveHide
            })
          })
        )
      }
      Promise.all(hidePromises).then(resolve)
    })
    
  }

  // 显示指定的 tabBar 项(没什么用。。。  和上文一致)
  showVisibleTabs(visibleTabs) {
    return new Promise((resolve) => {
      const showPromises = visibleTabs.map(index => 
        new Promise((resolveShow) => {
          uni.showTabBar({
            index: index,
            success: resolveShow,
            fail: (error) => {
              console.warn(`显示 tabBar ${index} 失败:`, error.errMsg)
               resolveShow() // 即使失败也继续执行
            }
          })
        })
      )
      Promise.all(showPromises).then(resolve)
    })
  }

  // 更新单个 tabBar 项的红点
  setTabBarBadge(index, text = '') {
    if (!text) {
      uni.removeTabBarBadge({ index })
      return
    }
    
    uni.setTabBarBadge({
      index,
      text: text.toString()
    })
  }

  // 更新消息红点
  updateNotificationBadge(count) {
    const userType = this.currentUserType
    const config = TABBAR_CONFIG[userType]
    
    if (config.visibleTabs.includes(3)) { // 消息 tab 的索引是 3
      this.setTabBarBadge(3, count > 0 ? count.toString() : '')
    }
  }

  // 检查页面访问权限
  hasPagePermission(pagePath) {
   
    if (!this.currentUserType) return false
    
    const config = TABBAR_CONFIG[this.currentUserType]
    if (!config) return false

    // 提取页面名称
    const pageName = this.extractPageName(pagePath)
    
    return config.permissions.includes(pageName)
  }

  // 从路径中提取页面名称
  extractPageName(pagePath) {
    if (!pagePath) return ''
    
    // 处理不同的路径格式
    const path = pagePath.replace(/^\//, '') // 去除开头斜杠
    const parts = path.split('/')
    
    // 返回最后一个非空部分
    for (let i = parts.length - 1; i >= 0; i--) {
      if (parts[i] && parts[i] !== 'index') {
        return parts[i]
      }
    }
    return 'index'
  }

  // 获取当前用户的可见页面列表
  getVisiblePages() {
    if (!this.currentUserType) return []
    
    const config = TABBAR_CONFIG[this.currentUserType]
    return config?.permissions || []
  }

  // 重置 tabBar 状态
  reset() {
    this.currentUserType = null
    this.isInitialized = false
  }
}

// 创建单例实例
export default new TabBarManager()